package main

import (
	"fmt"
	"reflect"
)

type Enum int

const (
	Zero Enum = 0
)

func main() {
	// type cat struct{}
	// // 获取结构体实例的反射类型对象
	// typeOfCat := reflect.TypeOf(cat{})
	// // 显示反射类型对象的名称和种类
	// fmt.Println(typeOfCat.Name(), typeOfCat.Kind())
	// // 获取 zero 常量的反射类型对象
	// typeOfA := reflect.TypeOf(Zero)
	// // 显示放射类型的对象名称和种类
	// fmt.Println(typeOfA.Name(), typeOfA.Kind())

	// golang 中，对指针获取反射对象是， 可以通过 reflect.Elem() 方法获取这个指针执行的元素类型，这个获取过程中被称为取元素，等效于对指针类型的变量做了一个 * 操作 demo：
	type cat struct{}
	ins := &cat{}
	// 创建 cat 的实力
	typeOfCat := reflect.TypeOf(ins)
	// 显示反射类型对象的名称和种类
	fmt.Printf("name: '%v' kind: '%v' \n", typeOfCat.Name(), typeOfCat.Kind())

	// 获取类型的元素
	typeOfCat = typeOfCat.Elem()
	// 显示反射类型的名称和种类
	fmt.Printf("element name: '%v', element kind: '%v'", typeOfCat.Name(), typeOfCat.Kind())
}
